#pragma once
#ifndef __STEERINGBEHAVIORS_HEADER__
#define __STEERINGBEHAVIORS_HEADER__

#include "Common.hpp"
class Agent;

//////////////////////////////////////////////////////////////////////////

class SteeringBehaviors
{
private:
	vec3 _wanderTarget;
	vec3 _wanderTargetProj;

public:
	SteeringBehaviors();

	vec3 separation(Agent* agent);
	vec3 cohesion(Agent* agent, float maxVelocity);
	vec3 alignment(Agent* agent);
	vec3 wander(Agent* agent, float dt, float jitter, float radius, float distance);
	vec3 evade(Agent* agent, float maxVelocity, float turnAround, float timeScale);
	vec3 pursuit(Agent* agent, float maxVelocity, float timeScale);

	vec3 evadeAgent(Agent* agent, Agent* evadedAgent, float maxVelocity, float turnAround, float timeScale);
	vec3 separateAgent(Agent* agent, Agent* sepAgent);

	void resetWanderTarget();
};

//////////////////////////////////////////////////////////////////////////

#endif // #ifndef __STEERINGBEHAVIORS_HEADER__